#include <string>
using namespace std;
string opers = "+-*/%";
// 返回码
enum
{
    DivZero = 1,
    ModZero,
    Unknown
};
// 任务
template <class T>
class Task
{
public:
    Task() {    }
    Task(int x, int y, char op)
        : _data1(x), _data2(y), _op(op), _result(0), _exitcode(0)
    {   }
    void operator()()
    {
        switch (_op)
        {
        case '+':
            _result = _data1 + _data2;
            break;
        case '-':
            _result = _data1 - _data2;
            break;
        case '*':
            _result = _data1 * _data2;
            break;
        case '/':
            {
                if (_data2 == 0) _exitcode = DivZero;
                else _result = _data1 / _data2;
            } 
            break;
        case '%':
            {
                if (_data2 == 0)
                    _exitcode = ModZero;
                else
                    _result = _data1 % _data2;
            }
            break;
        default:
            _exitcode = Unknown;
            break;
        }
    }
    string GetResult()
    {
        string result = to_string(_data1) + _op + to_string(_data2) + '=' + to_string(_result);
        result += "[code: " + to_string(_exitcode) + ']';
        return result;
    }
    string Data()
    {
        return to_string(_data1) + ' ' + _op + ' ' + to_string(_data2);
    }
private:
    T _data1;
    T _data2;
    char _op;
    T _result;
    int _exitcode;
};